package br.com.condominio.model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.condominio.view.vo.ResidenciaVO;

public class ResidenciaDAO {

	private DB db;

	public ResidenciaDAO() throws ClassNotFoundException, SQLException {
		db = new DB();
	}

	public boolean criar(ResidenciaVO residencia) throws SQLException {
		Connection conn = null;
		PreparedStatement ps;
		int id = 0;

		String sqlInsert = "INSERT INTO residencia ( andar, bloco, numero, "
				+ " predio, ramal, rua, telefone, descricao) "
				+ " VALUES (?, ?, ?, ?, ?, ?, ?, ?);";

		try {
			conn = db.getConexao();

			ps = conn.prepareStatement(sqlInsert);
			ps.setInt(1, residencia.getAndar());
			ps.setString(2, residencia.getBloco());
			ps.setInt(3, residencia.getNumero());
			ps.setString(4, residencia.getPredio());//
			ps.setString(5, residencia.getRamal());
			ps.setString(6, residencia.getRua());
			ps.setString(7, residencia.getTelefone());
			ps.setString(8, residencia.getDescricao());

			id = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.close();
			}
		}
		return id > 0;
	}

	public boolean atualizar(ResidenciaVO residencia) throws SQLException {
		Connection conn = null;
		PreparedStatement ps;
		int id = 0;

		String sqlAtualizar = "UPDATE residencia SET andar = ?, bloco = ?, "
				+ "numero = ?, predio = ?, ramal = ?, rua = ?, telefone = ?, descricao = ? WHERE cod_Residencia = ?;";

		try {
			conn = db.getConexao();

			ps = conn.prepareStatement(sqlAtualizar);
			ps.setInt(1, residencia.getAndar());
			ps.setString(2, residencia.getBloco());
			ps.setInt(3, residencia.getNumero());
			ps.setString(4, residencia.getPredio());//
			ps.setString(5, residencia.getRamal());
			ps.setString(6, residencia.getRua());
			ps.setString(7, residencia.getTelefone());
			ps.setString(8, residencia.getDescricao());
			ps.setInt(9, residencia.getCodResidencia());

			id = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.close();
			}
		}
		return id > 0;
	}

	public ResidenciaVO getResidenciaByID(int id) throws SQLException {
		Connection conn = null;
		PreparedStatement ps;
		ResidenciaVO residencia = null;

		try {
			conn = db.getConexao();

			String sqlSelect = "SELECT * FROM residencia WHERE cod_residencia = ? ;";
			ps = conn.prepareStatement(sqlSelect);
			ps.setInt(1, id);
			ResultSet rs = ps.executeQuery();

			List<ResidenciaVO> resultado = getListaResidencias(rs);
			if (resultado.size() > 0)
				residencia = resultado.get(0);

			rs.close();
			ps.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.close();
			}
		}
		return residencia;
	}

	public boolean excluir(ResidenciaVO residencia) throws SQLException {
		Connection conn = null;
		int id = 0;

		try {
			conn = db.getConexao();

			String sqlDelete = "DELETE FROM residencia WHERE cod_residencia = ? ;";
			PreparedStatement ps = conn.prepareStatement(sqlDelete);
			ps.setInt(1, residencia.getCodResidencia());

			id = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.close();
			}
		}
		return id > 0;
	}

	public List<ResidenciaVO> getAllResidencias() throws SQLException {
		Connection conn = null;
		List<ResidenciaVO> resultado = null;

		try {
			conn = db.getConexao();

			String sqlSelect = "SELECT * FROM residencia;";
			PreparedStatement ps = conn.prepareStatement(sqlSelect);
			ResultSet rs = ps.executeQuery();

			resultado = getListaResidencias(rs);

			rs.close();
			ps.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				conn.close();
			}
		}
		return resultado;
	}

	private List<ResidenciaVO> getListaResidencias(ResultSet rs)
			throws SQLException {
		List<ResidenciaVO> resultado = new ArrayList<ResidenciaVO>();
		while (rs.next()) {
			ResidenciaVO residencia = new ResidenciaVO();
			residencia.setCodResidencia((rs.getInt("cod_residencia")));
			residencia.setAndar(rs.getInt("andar"));
			residencia.setBloco(rs.getString("bloco"));
			residencia.setNumero(rs.getInt("numero"));
			residencia.setPredio(rs.getString("predio"));
			residencia.setRamal(rs.getString("ramal"));
			residencia.setRua(rs.getString("rua"));
			residencia.setTelefone(rs.getString("telefone"));
			residencia.setDescricao(rs.getString("descricao"));
			resultado.add(residencia);
		}
		return resultado;
	}
}
